// AI功能配置文件
// 定义了所有AI功能的配置，包括三种操作类型：插入、替换、全文处理

/**
 * AI功能操作类型枚举
 */
export const AI_OPERATION_TYPES = {
  INSERT: 'insert', // 插入类型：在当前位置插入新内容
  REPLACE: 'replace', // 替换类型：替换选中的内容
  PROCESS: 'process' // 全文处理类型：处理整个文档内容
}

/**
 * AI功能配置模板
 * @typedef {Object} AIFunctionConfig
 * @property {string} key - 功能唯一标识
 * @property {string} name - 功能显示名称
 * @property {string} description - 功能描述
 * @property {string} icon - 图标类名或Unicode
 * @property {string} type - 操作类型 (insert|replace|process)
 * @property {string|number} [prompt_id] - 提示模板ID
 * @property {string} [prompt_name] - 提示模板名称
 * @property {string} [prompt] - 直接的提示内容
 * @property {string|number} [aiprompt_id] - AI提示模板ID（优先级更高）
 * @property {string} [engine] - AI引擎，默认使用全局设置
 * @property {boolean} [requiresSelection] - 是否需要选中内容
 * @property {string} [loadingMessage] - 自定义加载消息
 * @property {boolean} [humanway] - 去AI优化标志
 * @property {Array} [keywords] - 关键词数组
 * @property {Array} [kvs] - 键值对数组，用于传递上下文信息
 * @property {Object} [buttonProps] - 按钮属性配置
 */

/**
 * 默认AI功能配置
 */
export const AI_FUNCTIONS_CONFIG = [
  // ==================== 插入类型功能 ====================
  {
    key: 'start',
    name: 'AI 插入开头',
    description: '让AI为文章生成精彩的开头段落',
    icon: 'el-icon-arrow-right',
    type: AI_OPERATION_TYPES.INSERT,
    aiprompt_id: '260',
    prompt_name: 'ai_write_intro',
    requiresSelection: false,
    loadingMessage: '🤖 AI 正在生成文章开头...',
    humanway: true, // 去AI优化
    buttonProps: {
      type: 'success',
      size: 'mini'
    }
  },
  {
    key: 'end',
    name: 'AI 插入结尾',
    description: '让AI为文章生成完美的结尾段落',
    icon: 'el-icon-arrow-left',
    type: AI_OPERATION_TYPES.INSERT,
    prompt_name: 'article_conclusion',
    aiprompt_id: 258,
    requiresSelection: false,
    loadingMessage: '🤖 AI 正在生成文章结尾...',
    buttonProps: {
      type: 'success',
      size: 'mini'
    }
  },
  {
    key: 'expertOpinion',
    name: 'AI专家意见',
    description: '插入AI生成的专家观点和见解',
    icon: 'el-icon-user',
    type: AI_OPERATION_TYPES.INSERT,
    prompt: '作为该领域的专家，请提供专业的观点和见解，要求观点独特、有深度，并提供实际的建议或解决方案。',
    aiprompt_id: 251,
    prompt_name: '专家意见',
    requiresSelection: false,
    loadingMessage: '🤖 AI 正在生成专家意见...',
    buttonProps: {
      type: 'primary',
      size: 'mini'
    }
  },

  // ==================== 替换类型功能 ====================
  {
    key: 'rewrite',
    name: 'AI 重写',
    description: '让AI重新编写选中的内容，使其更加清晰和生动',
    icon: 'el-icon-refresh',
    type: AI_OPERATION_TYPES.REPLACE,
    aiprompt_id: '278',
    prompt_name: 'ai_rewrite',
    requiresSelection: true,
    loadingMessage: '🤖 AI 正在重写内容...',
    buttonProps: {
      type: 'success',
      size: 'mini'
    }
  },
  {
    key: 'expand',
    name: 'AI段落扩写',
    description: '扩展选中段落，增加更多细节和例子',
    icon: 'el-icon-edit-outline',
    type: AI_OPERATION_TYPES.REPLACE,
    aiprompt_id: 259,
    prompt_name: 'ai_rewrite_paragraph',
    requiresSelection: true,
    loadingMessage: '🤖 AI 正在扩写段落...',
    buttonProps: {
      type: 'info',
      size: 'mini'
    }
  },
  {
    key: 'table',
    name: '转换表格',
    description: '将选中内容转换为结构化的表格格式',
    icon: 'el-icon-s-grid',
    type: AI_OPERATION_TYPES.REPLACE,
    prompt: '',
    prompt_name: 'table_rewrite',
    aiprompt_id: 257,
    requiresSelection: true,
    loadingMessage: '🤖 AI 正在转换为表格...',
    buttonProps: {
      type: 'warning',
      size: 'mini'
    }
  },
  {
    key: 'firstPerson',
    name: '第一人称优化',
    description: '将内容转换为第一人称视角，增加亲和力',
    icon: 'el-icon-user-solid',
    type: AI_OPERATION_TYPES.REPLACE,
    aiprompt_id: 250,
    prompt_name: 'first_person_rewrite',
    requiresSelection: true,
    loadingMessage: '🤖 AI 正在第一人称优化...',
    buttonProps: {
      type: 'primary',
      size: 'mini'
    }
  },
  {
    key: 'techToExample',
    name: '技术转案例',
    description: '将技术性内容转换为易懂的实际案例',
    icon: 'el-icon-document-copy',
    type: AI_OPERATION_TYPES.REPLACE,
    aiprompt_id: 266,
    prompt_name: 'tech_to_example',
    requiresSelection: true,
    loadingMessage: '🤖 AI 正在转换为案例...',
    buttonProps: {
      type: 'info',
      size: 'mini'
    }
  },
  {
    key: 'aiImageSearch',
    name: 'AI 搜图',
    description: '基于内容搜索相关图片（开发中）',
    icon: 'el-icon-picture',
    type: AI_OPERATION_TYPES.PROCESS,
    prompt: '基于文档内容，推荐相关的图片关键词和描述：',
    requiresSelection: false,
    loadingMessage: '🤖 AI 正在搜索相关图片...',
    buttonProps: {
      type: 'primary',
      size: 'mini'
    }
  }
]

/**
 * 根据key获取AI功能配置
 * @param {string} key - 功能键名
 * @returns {AIFunctionConfig|null}
 */
export function getAIFunctionConfig(key) {
  return AI_FUNCTIONS_CONFIG.find(config => config.key === key) || null
}

/**
 * 根据类型获取AI功能配置列表
 * @param {string} type - 操作类型
 * @returns {AIFunctionConfig[]}
 */
export function getAIFunctionsByType(type) {
  return AI_FUNCTIONS_CONFIG.filter(config => config.type === type)
}

/**
 * 获取所有插入类型的AI功能
 * @returns {AIFunctionConfig[]}
 */
export function getInsertAIFunctions() {
  return getAIFunctionsByType(AI_OPERATION_TYPES.INSERT)
}

/**
 * 获取所有替换类型的AI功能
 * @returns {AIFunctionConfig[]}
 */
export function getReplaceAIFunctions() {
  return getAIFunctionsByType(AI_OPERATION_TYPES.REPLACE)
}

/**
 * 获取所有全文处理类型的AI功能
 * @returns {AIFunctionConfig[]}
 */
export function getProcessAIFunctions() {
  return getAIFunctionsByType(AI_OPERATION_TYPES.PROCESS)
}

/**
 * 验证AI功能配置的有效性
 * @param {AIFunctionConfig} config - 配置对象
 * @returns {boolean}
 */
export function validateAIFunctionConfig(config) {
  if (!config.key || !config.name || !config.type) {
    return false
  }

  if (!Object.values(AI_OPERATION_TYPES).includes(config.type)) {
    return false
  }

  // 检查是否至少有一种提示配置方式
  if (!config.prompt && !config.prompt_id && !config.prompt_name) {
    return false
  }

  return true
}

/**
 * 添加自定义AI功能配置
 * @param {AIFunctionConfig} config - 新的功能配置
 * @returns {boolean} 是否添加成功
 */
export function addCustomAIFunction(config) {
  if (!validateAIFunctionConfig(config)) {
    console.error('AI功能配置无效:', config)
    return false
  }

  // 检查key是否已存在
  if (getAIFunctionConfig(config.key)) {
    console.error('AI功能key已存在:', config.key)
    return false
  }

  AI_FUNCTIONS_CONFIG.push(config)
  return true
}

/**
 * 更新现有AI功能配置
 * @param {string} key - 功能键名
 * @param {Partial<AIFunctionConfig>} updates - 更新的配置
 * @returns {boolean} 是否更新成功
 */
export function updateAIFunction(key, updates) {
  const index = AI_FUNCTIONS_CONFIG.findIndex(config => config.key === key)
  if (index === -1) {
    console.error('未找到AI功能:', key)
    return false
  }

  const updatedConfig = { ...AI_FUNCTIONS_CONFIG[index], ...updates }

  if (!validateAIFunctionConfig(updatedConfig)) {
    console.error('更新后的AI功能配置无效:', updatedConfig)
    return false
  }

  AI_FUNCTIONS_CONFIG[index] = updatedConfig
  return true
}

/**
 * 获取功能对应的提示内容配置
 * @param {AIFunctionConfig} config - 功能配置
 * @returns {Object} 包含提示配置的对象
 */
export function getPromptConfig(config) {
  const result = {}

  if (config.prompt) {
    result.type = 'direct'
    result.content = config.prompt
  } else if (config.prompt_id) {
    result.type = 'id'
    result.value = config.prompt_id
  } else if (config.prompt_name) {
    result.type = 'name'
    result.value = config.prompt_name
  }

  return result
}

export default {
  AI_OPERATION_TYPES,
  AI_FUNCTIONS_CONFIG,
  getAIFunctionConfig,
  getAIFunctionsByType,
  getInsertAIFunctions,
  getReplaceAIFunctions,
  getProcessAIFunctions,
  validateAIFunctionConfig,
  addCustomAIFunction,
  updateAIFunction,
  getPromptConfig
}
